//
//  JHSFeatureView.m
//  JHS Feature
//
//  Created by YYX on 2017/3/24.
//  Copyright © 2017年 yyx. All rights reserved.
//

#import "JHSFeatureView.h"


@interface JHSFeatureView ()<UIScrollViewDelegate>
@property (nonatomic, weak) UIScrollView *scrollView;
@property (nonatomic, weak) UIPageControl *pageControl;
@end

@implementation JHSFeatureView
// 只要scrollView里面的内容在滚动就会调用此方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    // 滚动出新的一页只要出来一半多一点点就显示下一页
    NSInteger page = scrollView.contentOffset.x / scrollView.bounds.size.width + 0.499999;
    //    NSLog(@"%f  ---%f", scrollView.contentOffset.x, scrollView.contentOffset.x / scrollView.bounds.size.width);
    ////    1 /  5 + 0.49999;
    _pageControl.currentPage = page;
    
    
    //    if (page == _imageNames.count) {
    //        _pageControl.hidden = YES;
    //    } else {
    //        _pageControl.hidden = NO;
    //    }
    // 如果是显示出来空白页时让分页指示器隐藏,反之应该显示
    _pageControl.hidden = (_imageNames.count == page);
    
    scrollView.tag = page;
}

// 完全停止滚动时会调用一次此方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    
    
    
    // 如果停下来之后显示的是空白页,那就把新特性界面移除
    if (scrollView.tag == _imageNames.count) {
        [self.delegate setNavHiddle:self withIsShow:1];

        [self removeFromSuperview];
    }
    
}
/**
 如果要重写控件的初始化方法最好重写initWithFrame:
 因为调用init方法后还是会执行initWithFrame:
 但初始化时直接调用initWithFrame:方法是不会调用init方法
 initWithFrame:方法是控件指定的初始化方法
 */
- (instancetype)initWithFrame:(CGRect)frame
{
    
    self = [super initWithFrame:frame];
    if (self) {
        
        // 添加srollView
        [self makeScrollView];
        
        
        // 创建分页指示器
        UIPageControl *pageControl = [[UIPageControl alloc] init];
        _pageControl = pageControl;
        // 一定不要添加到scrollView上了
        [self addSubview:pageControl];
        // 当前显示第几页
        pageControl.currentPage = 0;
        // 设置其它页点的颜色
        pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
        // 设置当前页点的颜色
        pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
        
        [pageControl mas_makeConstraints:^(MASConstraintMaker *make) {
            make.bottom.equalTo(self.mas_bottom).offset(-20);
            make.centerX.equalTo(self.mas_centerX).offset(0);
        }];
        
        // 让pageControl不能点击
        pageControl.enabled = NO;
        
    }
    return self;
}

#pragma mark - 添加及设置scrollView
- (void)makeScrollView {
    // 1.创建scrollView
    UIScrollView *scrollView = [[UIScrollView alloc] init];
    // 3.给属性赋值
    _scrollView = scrollView;
    // 2.添加scrollView到guideView上
    [self addSubview:scrollView];
    // 4.添加约束
    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self).offset(0);
    }];
    
    
    // 5.设置分页
    _scrollView.pagingEnabled = YES;
    // 6.禁用弹簧效果
    _scrollView.bounces = NO;
    // 7.隐藏滚动条
    _scrollView.showsVerticalScrollIndicator = NO;
    _scrollView.showsHorizontalScrollIndicator = NO;
    
    
    // 8.给scrollView设置代理
    _scrollView.delegate = self;
}





#pragma mark - 重写属性的set方法,在拿来数据之后给scrollVeiw添加子控件
- (void)setImageNames:(NSArray *)imageNames {
#warning mark - 重写属性set方法一定要注意给下划线成员变量赋值
    _imageNames = imageNames;
    
    
    // 定义scrollView的宽
    CGFloat scrollViewW = self.bounds.size.width;
    // 定义scrollView的高
    CGFloat scrollViewH = self.bounds.size.height;
    
    // for循环创建及添加imageView
    for (NSInteger i = 0; i < imageNames.count; i++) {
        
        // 1.创建imageView
        UIImageView *imageView = [[UIImageView alloc] init];
        // 2.根据传过来的图片名称去获取图片文件路径
        NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNames[i] ofType:@"jpg"];
        // 3.通过路径去加载
        UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
        
        // 4.给imageView设置图片
        imageView.image = image;
#warning mark - 因为scrollView是通过约束是间距设置frame的,所以在此处还拿到scrollView的frame,因为约束的代码计算比较靠后,所以如果像提前让某个控件去根据约束计算frame可以用它的父控件去调用layoutIfNeeded,会让它的frame计算提前,但不建议违背它的原理
        //        [self layoutIfNeeded];
        
        
        // 5.设置imageView的frame 图片是水平一个接一个的排列,所以imageView的X是不一样的
        imageView.frame = CGRectMake(scrollViewW * i, 0, scrollViewW, scrollViewH);
        
        // 6.把imageView添加到scrollView上
        [_scrollView addSubview:imageView];
        
        
        
        // 每一张imageView添加一个加载更多按钮
//        [self makeLoadMoreBtn:imageView];
        
        // imageView默认是不能进行点击的,所以它里面的子控件也不能点击,如果想让它可以点击应该让它可以和用户交互
        imageView.userInteractionEnabled = YES;
    }
    
    // 7.设置scrollView的滚动范围
    _scrollView.contentSize = CGSizeMake((imageNames.count + 1) * scrollViewW, 0);
    
    // 8.设置分页指示器的点的总个数
    _pageControl.numberOfPages = imageNames.count;
    
}


#pragma mark - 给每一个imageView上面添加一个加载更多按钮
//- (void)makeLoadMoreBtn:(UIImageView *)imageView {

//    // 创建按钮
//    UIButton *btn = [[UIButton alloc] init];
//    
//     //设置按钮默认状态的图片
//    [btn setImage:[UIImage imageNamed:@"buttonBackground"] forState:UIControlStateNormal];
//    [btn setImage:[UIImage imageNamed:@"buttonBackground"] forState:UIControlStateHighlighted];
    
    // 把加载更多按钮添加在imageView上
//    [imageView addSubview:btn];
    // 让按钮根据内部自适应大小
//    [btn sizeToFit];
//    
//    // 设置位置约束
//    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.right.equalTo(imageView.mas_right).offset(-20);
//        make.bottom.equalTo(imageView.mas_bottom).offset(-50);
//    }];
//    
//    // 给按钮添加监听
//    [btn addTarget:self action:@selector(loadMoreBtnClick:) forControlEvents:UIControlEventTouchUpInside];
//}

#pragma mark - 按钮监听方法
- (void)loadMoreBtnClick:(UIButton *)btn {
    
    // 1.先把当前点击的按钮隐藏
    btn.hidden = YES;
    // 2.把当前被点击按钮的父控件放大,
    [UIView animateWithDuration:1.0 animations:^{
        // 让imageView慢慢放大
        btn.superview.transform = CGAffineTransformMakeScale(2, 2);
        // 慢慢透明
        btn.superview.alpha = 0;
    } completion:^(BOOL finished) {
        // 直接把新特性界面全部移除
        // 3.进入主界面"把新特性界面删除"
        
        [self.delegate setNavHiddle:self withIsShow:1];
        
//        self.navigationController.navigationBar.hidden = YES;
//        self.tabBarController.tabBar.hidden = YES;
        [self removeFromSuperview];
        
    }];
    
}




@end
